/**
 * 存储适配器基础接口
 */
export interface BaseStorage<T> {
  /**
   * 设置数据
   * @param key 键
   * @param value 值
   * @param ttl 过期时间(毫秒)，可选
   */
  set(key: string, value: T, ttl?: number): Promise<void>;

  /**
   * 获取数据
   * @param key 键
   */
  get(key: string): Promise<T | null>;

  /**
   * 删除数据
   * @param key 键
   */
  delete(key: string): Promise<void>;

  /**
   * 获取所有数据
   */
  getAll(): Promise<T[]>;

  /**
   * 根据条件查询数据
   * @param predicate 过滤条件
   */
  query(predicate: (item: T) => boolean): Promise<T[]>;

  /**
   * 清空存储
   */
  clear(): Promise<void>;

  /**
   * 检查键是否存在
   * @param key 键
   */
  has(key: string): Promise<boolean>;

  /**
   * 获取存储大小
   */
  size(): Promise<number>;
}

/**
 * 数据项包装器（用于TTL支持）
 */
export interface StorageItem<T> {
  /** 存储的值 */
  value: T;
  /** 过期时间戳 */
  expireAt?: number;
}

/**
 * 存储选项
 */
export interface StorageOptions {
  /** 命名空间 */
  namespace: string;
  /** 存储名称 */
  storeName?: string;
  /** 版本号 */
  version?: number;
  /** 默认过期时间(毫秒)，0表示永不过期 */
  defaultTTL?: number;
  /** 加密选项 */
  encryption?: {
    /** 是否启用加密 */
    enabled: boolean;
    /** 加密密钥，如不提供则自动生成 */
    key?: string;
  };
  /** 自动清理过期数据的间隔(毫秒)，0表示不自动清理 */
  cleanupInterval?: number;
}
